package com.dcy.znoa.domain.attendance;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("att_real_record")//att_record_user 员工考勤原始记录表
public class AttRealRecord {

    @TableId(value ="record_id")
    Long recordId;//记录ID

    @TableField("oper_id")
    Long operId;

    @TableField
    Long compId;//企业ID

    @TableField("record_type")
    Integer recordType;//打卡类型，1为上班，2为下班

    @TableField("hit_type")
    Integer hitType;//打卡方式，1为手机，2为刷卡（设备打卡）

    @TableField("record_time")
    Date recordTime;//打卡时间
    /**
     * 打卡时间状态
     0 打卡正常
     1 有申请（不用打卡）
     8 未按时（上班时为迟到，下班时为早退）
     9 未打卡
     PS：请假、出差、外勤如不需要打卡的情况下在本表中不显示。
     出差和外勤需要打卡时在本表中为打卡异常
     设计成这样的目的在于:4个1加起来也没有8大；判断的标准是 0 为正常 1-4 为申请 8以上为异常
     */
    @TableField("time_status")
    Integer timeStatus;
    /**
     * 打卡地点状态
     0 打卡正常
     1 有申请（不用打卡）
     8 地点异常
     9 未打卡
     PS：请假、出差、外勤如不需要打卡的情况下在本表中不显示。
     出差和外勤需要打卡时在本表中为打卡异常
     */
    @TableField("add_status")
    Integer addStatus;

    @TableField("address")
    String address;//打卡地点

    @TableField("longitude")
    String longitude;//经度

    @TableField("latitude")
    String latitude;//维度

    @TableField("att_time")
    Date attTime;//班次时间，只有年月日有效

    @TableField("remark")
    String remark;//班次时间，只有年月日有效

    @TableField(exist = false)
    Integer total;//查询和统计用

    //以下是关联的申请表信息
    @TableField(exist = false)
    Long applyId;//申请ID
    @TableField(exist = false)
    String eName;
    @TableField(exist = false)
    Long eId;//对应实体表ID，可以为空；申述时不能为空

    @TableField(exist = false)
    Long sendOperId;//申请用户id

    @TableField(exist = false)
    Long receiveOperId;//接收人ID

    @TableField(exist = false)
    Integer isFinal;//是否最终审批人

    @TableField(exist = false)
    Date applyTime;//申请时间

    @TableField(exist = false)
    Date startTime;

    @TableField(exist = false)
    Date endTime;//结束时间，一般留空

    @TableField(exist = false)
    Integer type;//申请类型 1 请假 2 出差 3 外勤 9 申述

    @TableField(exist = false)
    Integer childType;

    @TableField(exist = false)
    String title;//申请标题

    @TableField(exist = false)
    String content;//申请内容

    @TableField(exist = false)
    Date auditTime;//审核时间

    @TableField(exist = false)
    Integer isAudit;//审核状态：0：未审核 1  通过 2 未通过

    @TableField(exist = false)
    String auditContent;//审核内容

    @TableField(exist = false)
    Integer isRevoke;//是否已撤销 ，0为否，1为是

    @TableField(exist = false)
    Apply apply;//考勤对应的申述

//    @TableField(exist = false)
//    List<Apply> applyList;

    //给未打卡的构造函数  因为recordId 是从attRecord中复制过来的，所以构造方法中需要有这个字段
    public AttRealRecord(Long recordId,Long operId, Long compId, Integer recordType, Date attTime) {
        this.recordId = recordId;
        this.operId = operId;
        this.compId = compId;
        this.recordType = recordType;
        this.timeStatus = 9;
        this.addStatus = 9;
        this.attTime = attTime;
    }

    //未打卡、申请生成  专用构造函数
    public AttRealRecord(Long operId, Long compId, Integer recordType, Integer timeStatus, Integer addStatus, Date attTime) {
        this.operId = operId;
        this.compId = compId;
        this.recordType = recordType;
//        this.timeStatus = 9;
//        this.addStatus = 9;
        this.timeStatus = timeStatus;
        this.addStatus = addStatus;
        this.attTime = attTime;
    }

}
